
package Esquemas;

/**
 * Clase que representa un atributo
 * @author Carmen M. Morillo Arias, Christian Neria Suárez, Diego Ojeda García
 */
public class Atributo {
    private String nombre;
    private final String nombre_tipos_de_datos;
    private final String nombre_esquema;
    private boolean multievaluado;
    private boolean derivado;
    private String tipo;
    private String nombre_atributo_compuesto;
    private boolean fueClave;

    /**
     * Constructor de la clase
     * @param nombre Nombre del atributo
     * @param nombre_tipos_de_datos Nombre del tipo de datos al que pertenece
     * @param nombre_esquema Nombre del esquema al que pertenece
     * @param multievaluado Booleano que nos indica si es un atributo multivaluado
     * @param derivado Booleano que nos indica si es un atributo derivado
     * @param tipo Tipo de datos del atributo
     * @param nombre_atributo_compuesto Referencia a un atributo si es parte de un atributo compuesto
     */
    public Atributo(String nombre, String nombre_tipos_de_datos, String nombre_esquema, boolean multievaluado, boolean derivado, String tipo, String nombre_atributo_compuesto) {
        this.nombre = nombre;
        this.nombre_tipos_de_datos = nombre_tipos_de_datos;
        this.nombre_esquema = nombre_esquema;
        this.multievaluado = multievaluado;
        this.derivado = derivado;
        this.tipo = tipo;
        if(tipo.equalsIgnoreCase("COMPUESTO")){
            this.multievaluado = true;
        }
        this.nombre_atributo_compuesto = nombre_atributo_compuesto;
        this.fueClave = false;
    }
    /**
     * Método que indica si un atributo es derivado o no
     * @return true si es derivado, false en caso contrario
     */
    public boolean isDerivado() {
        return derivado;
    }
    
    /**
     * Método que establece si un atributo es derivado o no
     * @param derivado true si es derivado, false en caso contrario
     */
    public void setDerivado(boolean derivado) {
        this.derivado = derivado;
    }
    
    /**
     * Método que indica si un atributo es multivaluado o no
     * @return true si es multivaluado, false en caso contrario
     */
    public boolean isMultievaluado() {
        return multievaluado;
    }
    
    /**
     * Método que establece si un atributo es multivaluado o no
     * @param multievaluado true si es multivaluado, false en caso contrario
     */
    public void setMultievaluado(boolean multievaluado) {
        this.multievaluado = multievaluado;
    }
    
    /**
     * Método que obtiene el nombre de un atributo
     * @return Nombre del atributo
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Método que establece el nombre de un atributo
     * @param nombre Nombre del atributo
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Método que obtiene el tipo de un atributo
     * @return tipo del atributo
     */
    public String getTipo() {
        return tipo;
    }
    
    /**
     * Método que establece el tipo de un atributo
     * @param tipo Tipo del atributo
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getNombre_atributo_compuesto() {
        return nombre_atributo_compuesto;
    }

    public void setNombre_atributo_compuesto(String nombre_atributo_compuesto) {
        this.nombre_atributo_compuesto = nombre_atributo_compuesto;
    }

    public void setFueClave(boolean fueClave) {
        this.fueClave = fueClave;
    }

    public boolean isFueClave() {
        return fueClave;
    }
    
    
}
